iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 28
0
自我挑戰組

寇丁人妻的前端書蟲日誌系列 第 28

Day28:JavaScript 設計模式 優良部份 Chapter07 正則表達式 筆記精要(下)

  • 分享至 

  • xImage
  •  

建構

【 正規式實字 】

  • 正規式實字:由一對斜線圍起。
  • 對 RegExp 可設置三個旗標,分別以 g、i、m 代表,旗標直接附加在正規實字後方。
    • g:全域,比對多次。
    • i:鈍感,忽略字元大小寫。
    • m:多行,^ 與 $ 能比對行末字元。
var my_regexp = /"(?:\\.|[^\\\""])*"/g;

【 建構式 】
構式接受傳入字串,並編譯成 RegExp 物件。

var my_regexp = new RegExp("\"(?:\\.|[^\\\\\\\"])*\"", 'g');
  • 建字串需要額外注意反斜線各自有不同意義,須以引號轉義。
  • 第二個參數為指定旗標的字串。

RegExp 物件的特性

  • global:使用 g 時為 true。
  • ignoreCase:使用 i 時為 true。
  • lastIndex:開始下一輪 exec 比對時為 true。
  • muliline:使用 m 時為 true。
  • source:正規式來源字元。

以 RegExp 物件共享實例:

function make_a_matcher( ) {
    return /a/gi;
}

var x = make_a_matcher( );
var y = make_a_matcher( );
x.lastIndex = 10;
console.log(y.lastIndex); //10

零件

正規式選項

  • 包含一至多個正規式序列。
  • 序列以|字元區分。
"into.match(/in|int/)"

從 into 中找出 in 就不會再找 int 了。

正規式序列

  • 包含一至多個正規式要素。
  • 每個正規式都能選用性地後街量詞,如果沒量詞表示只需比對一次。

正規式要素

  • 可能是字元、集結、字元類組,或是轉義序列。
  • 所有字元都被視為實字,除了控制字元和特殊字元:
    • \ / [ ] ( ) { } ? + * | . ^ $
    • 如果想比對上述字元必須加上\
    • 特殊字元加上\都能變為實字,但\無法讓英文變實字。
  • 未轉義的.可以比對任何字元,行末字元例外。
  • 未轉義的^可以比對字串始處,但 lastIndex 特性需為 0,若指定旗標 m 亦可以把行末字元納入比對。
  • 未轉義的$可以比對字串尾處,若指定旗標 m 亦可以把行末字元納入比對。

正規式轉義

  • \ 在正規要素及字串中皆表示轉義,但在正規要素的運作稍微不同。
  • \f:與在字串相同,表示換頁字元
  • \n:表示換行字元。
  • \r:表示游標歸位(列首)字元。
  • \t:表 tab 字元。
  • \u:表示十六進位常數,來指定 unicode 字元。
  • \b:在正規式中,不表示為倒退字元。
  • \d:與[0-9]意思相同;\D:為前者反義,與[^0-9]相同,比對非數字字元。
  • \s[\f\n\r\t\u000B\u0020\u00A0\2028\u2029] 同義;\S 與前者反義,與 [^\f\n\r\t\u000B\u0020\u00A0\2028\u2029] 同義。
  • \w[0-9A-Z_a-z] 意思相同,能比對所有英數字元;\W 與前者反義,與 [^0-9A-Z_a-z] 同義。(/w 應該代表組成詞彙的一組字元。)
  • \b 設計為字詞邊界的定位點,它使用/w尋找字詞邊界,對於多國語系無效,這不算優良部份。

正規式集結

  • 記憶集結:記憶集結是以括號圍起的正規式選項。每個記憶集結都有編號,第一個左括號為第一個集結,第二個左括號是第二個集結。
  • 非記憶集結:多了(?,非記憶集結只單純做比對,不記憶符合的文段。
  • 右合樣集結:多了(?=字首,比對出集結的文段後,又再回到集結開始的地方,無法比對東西,他也不算優良部份。
  • 右不合樣集結:多了(?!字首,無法比對東西才成功,他也不算優良部份。

其他規則

  • 正規式類組:是用來指定一組字元的便利方式。例如:(?:a|e|i|o|u) 可以寫成[aeiou]
  • 正規式類組轉義:與一般正規轉義規則不太相同。[\b]意思是倒退字元。
  • 正規式量詞:正規式要素後接正規式量詞,以決定要素與比對次數,大括號圍起的數字就是要比對的次數。
    • /www/ :等同於 /w{3}/
    • {3,6}:比對三、四、五或六次。
    • {3,}:可比對三次以上。
    • ?:等同於 {0,1}
    • *:等同於 {0,}
    • +:等同於 {1,}

資料來源:《JavaScript 優良部份》 Douglas Crockford 著 歐萊禮
筆記純屬推廣及分享,如有侵權,請告知。
Please advise to remove immediately if any infringement caused.


上一篇
Day27:JavaScript 設計模式 優良部份 Chapter07 正則表達式 筆記精要(上)
下一篇
Day29:JavaScript 優良部份 心得
系列文
寇丁人妻的前端書蟲日誌30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言